package com.linzm.leetcode.primary.exercises4_20230129;

/**
 * @Author zimingl
 * @Date 2023/1/29 22:37
 * @Description: 颜色填充
 */
public class Demo2 {
    /**
     * 输入：
     * image = [[1,1,1],
     *          [1,1,0],
     *          [1,0,1]]
     * sr = 1, sc = 1, newColor = 2
     * 输出：[
     *          [2,2,2],
     *          [2,2,0],
     *          [2,0,1]]
     * 解释:
     * 初始坐标点位于图像的正中间，坐标 (sr,sc)=(1,1) 。
     * 初始坐标点周围区域上所有符合条件的像素点的颜色都被更改成 2 。
     * 注意，右下角的像素没有更改为 2 ，因为它不属于初始坐标点的周围区域。
     */
    public static void main(String[] args) {
        Demo2 demo2 = new Demo2();
        int[][] image = {{1,1,1},{1,1,0},{1,0,1}};
        int sr = 1, sc = 1, newColor = 2;
        int[][] floodFill = demo2.floodFill(image, sr, sc, newColor);
        System.out.println(floodFill);
    }

    public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {
        if (image[sr][sc] == newColor) {
            return image;
        }
        int m = image[sr][sc];
        image[sr][sc] = newColor;
        // 往下
        if (sr != image.length - 1 && image[sr + 1][sc] == m) {
            floodFill(image, sr + 1, sc, newColor);
        }
        // 往左
        if (sc != 0 && image[sr][sc - 1] == m) {
            floodFill(image, sr, sc - 1, newColor);
        }
        // 往上
        if (sr != 0 && image[sr - 1][sc] == m) {
            floodFill(image, sr - 1, sc, newColor);
        }
        // 往右
        if (sc != image[0].length - 1 && image[sr][sc + 1] == m) {
            floodFill(image, sr, sc + 1, newColor);
        }
        return image;
    }
}
